/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ejb.dao;

import entidades.Paises;
import entidades.Planeseco;
import entidades.Planesocio;
import entidades.Propuesta;
import java.util.ArrayList;
import java.util.Date;
import javax.ejb.Stateless;
import javax.persistence.Query;

/**
 *
 * @author Pablo
 */
@Stateless
public class PropuestaDAO extends GenericoDAOJPA<Propuesta> implements PropuestaDAOLocal {

    @Override
    public ArrayList<Propuesta> findPropuesta(Paises paisDestino, Date fechaIni, 
            Date fechaFin, Integer nDiasMax, Integer nDiasMin, Planeseco planEco,
            Planesocio planOcio) {
        /*
        String consulta3 ="SELECT p FROM Propuesta p "
                + "join p.propuestadestinosList d "
                + "join p.propuestafechasList f "
                + "where d.idPais =:paisDestino "
                + "and f.fechaIni <:fechaFin and f.fechaFin >:fechaIni";
        */
        boolean and = false;
        String consulta = "SELECT distinct p FROM Propuesta p";
        if (paisDestino != null){
            consulta = consulta + " join p.propuestadestinosList d";
        }
        if (fechaIni != null && fechaFin != null){
            consulta = consulta + " join p.propuestafechasList f";
        }
        if (paisDestino != null || fechaIni != null || nDiasMax != null || planEco != null){
            consulta = consulta + " where";
        }
        if (paisDestino != null){
            consulta = consulta + " d.idPais =:paisDestino";
            and = true;
        }
        if (fechaIni != null && fechaFin != null){
            if (and)
                consulta = consulta + " and";
            consulta = consulta + " f.fechaIni <:fechaFin and f.fechaFin >:fechaIni";
            and = true;
        }
        if (nDiasMax != null || nDiasMin != null){
            if (and)
                consulta = consulta + " and";
            consulta = consulta + " p.diasMin <=:nDiasMax and p.diasMax >=:nDiasMin";
            and = true;
        }
        if (planEco != null){
            if (and)
                consulta = consulta + " and";
            consulta = consulta + " p.planEco =:planEco";
        }   
        if (planOcio != null){
            if (and)
                consulta = consulta + " and";
            consulta = consulta + " p.planOcio =:planOcio";
        }  
        Query query = em.createQuery(consulta);        
        if (paisDestino != null){
            query.setParameter("paisDestino", paisDestino);
        }
        if (fechaIni != null && fechaFin != null){
            query.setParameter("fechaFin", fechaFin);
            query.setParameter("fechaIni", fechaIni);
        }
        if (nDiasMax != null || nDiasMin != null){
            query.setParameter("nDiasMax", nDiasMax);
            query.setParameter("nDiasMin", nDiasMin);
        }
        if (planEco != null){
            query.setParameter("planEco", planEco);
        }
        if (planEco != null){
            query.setParameter("planOcio", planOcio);
        }
        ArrayList<Propuesta> propuestas = new ArrayList<>(query.getResultList());
        return propuestas;
    }

    @Override
    public Propuesta getPropuesta(Integer idPropuesta) {        
        return buscarPorId(idPropuesta);
    }

    @Override
    public Propuesta newPropuesta(Propuesta propuesta) throws Exception{
        Propuesta p = crear(propuesta);
        return p;           
    }
    
    
}